iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0
自我挑戰組

JavaScript 奇奇怪怪的核心觀念系列 第 15

(Day15) 閉包進階使用,工廠模式及私有方法。

  • 分享至 

  • xImage
  •  

上回介紹閉包概念以及閉包大致運用,這次則介紹實做比較常用閉包的幾種模式

工廠模式

上個章節有介紹到,使用不同變數可以讓閉包儲存的記憶體分開,在透過不同參數可以達成需要重複運行,卻需要不同值做呈現、運算的部分,比如下面範例。

function interview(name,office){
	return function(){
	  return console.log(`我的名字是 ${name},我是來應徵 ${office}`)
	  }
}
const Ryder = interview('Ryder','前端工程師')
Ryder() // 我的名字是Ryder,我是來應徵 前端工程師

const Jason = interview('Jason','專案經理')
Jason() //我的名字是Jason,我是來應徵 專案經理

const Emma = interview('Emma','品管工程師')
Emma() //我的名字是 Emma,我是來 品管工程師

私有方法 又稱 模組設計模式(module pattern)

上一章節也有提到,最簡單的閉包就是在函示中 return 一個函示,而私有方法 則是 return 出一個物件,再將各種函示包在物件中,這樣就可以呼叫物件中各式不同的方法,以達成實做時的各種需求,並且和工廠模式相同,使用不同變數、常數閉包儲存的記憶體也會不同,因此可以透過不同參數達成各自獨立計算的需求。

function buyGame(initValue){
  let money = initValue||0
  return {
    buyNS(){
      money = money - 9000
    },
    buyPS5(){
      money = money - 15000
    },
    remainMoney(){
      return money
    }
  }
}
const Ryder = buyGame(30000)
Ryder.buyNS()
Ryder.buyNS()
console.log(Ryder.remainMoney()) //Ryder 買了兩台 NS 剩 12000

const Emma = buyGame(50000)
Emma.buyNS()
Emma.buyPS5()
console.log(Emma.remainMoney()) //Emma 買了一台 NS 一台 PS5 剩下26000

P.S 這邊的 buyNS()buyPS5() 是使用物件函式縮寫,未縮寫前是 buyNS:fuction()buyPS5: function()

參考文獻

  • JavaScript 核心篇 (六角學院)

上一篇
(Day14) 閉包 (Closure) 介紹
下一篇
(Day-16) this 介紹上 - this 的指向
系列文
JavaScript 奇奇怪怪的核心觀念30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言